package com.qingcloud.adminbackend.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qingcloud.adminbackend.controller.open.param.OrgInfoParam;
import com.qingcloud.adminbackend.entity.sysfunction.SysOrgFunction;
import com.qingcloud.adminbackend.entity.sysorder.SysUserOrderMgrDTO;
import com.qingcloud.adminbackend.entity.sysorg.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 客户表 Mapper 接口
 * </p>
 *
 * @author liyuhong
 * @since 2018-11-15
 */
public interface SysOrgMapper extends BaseMapper<SysOrg> {
    /**
     * 查询一级客户列表
     *
     * @param sysOrgDTO
     * @return
     */
    IPage<SysOrgBO> findSysOrgMgrList(Page<SysOrgBO> page, @Param("sysOrgDTO") SysOrgDTO sysOrgDTO);

    /**
     * 查询分支机构
     *
     * @param ids
     * @param sysOrgDTO
     * @return
     */
    Set<SysOrgBO> findChildSysOrgList(@Param("ids") Set<String> ids, @Param("sysOrgDTO") SysOrgDTO sysOrgDTO);

    /**
     * 查询分支机构
     *
     * @param ids
     * @return
     */
    Set<SysOrg> findChildSysOrgListV2(@Param("ids") List<String> ids);

    /**
     * 查询客户详情
     *
     * @param id
     * @return
     */
    SysOrg findSysOrgById(@Param("id") String id);

    /**
     * 新增客户
     *
     * @param sysOrg
     * @return
     */
    int insertSysOrg(SysOrg sysOrg);

    /**
     * 查询一级客户总条数
     *
     * @param sysOrgDTO
     * @return
     */
    long findSysOrgCount(@Param("sysOrgDTO") SysOrgDTO sysOrgDTO);

    /**
     * 添加客户与功能模块关系边表
     *
     * @param list
     * @return
     */
    int insertSysOrgFunction(@Param("sysOrgFunctions") List<SysOrgFunction> list);

    /**
     * 修改客户
     *
     * @param sysOrg
     */
    void updateSysOrg(SysOrg sysOrg);

    /**
     * 删除客户
     *
     * @param ids
     */
    void deleteSysOrg(@Param("ids") List<String> ids);

    /**
     * 查询该用户关联的分支机构
     *
     * @param sysOrgDTO
     * @return
     */
    Set<SysOrgBO> getChildSysOrgMgrList(@Param("sysOrgDTO") SysOrgDTO sysOrgDTO);

    /**
     * 该用户属于的客户
     *
     * @param sysOrgDTO
     * @return
     */
    IPage<SysOrgBO> findSysOrgByUserId(Page<SysOrgBO> page, @Param("sysOrgDTO") SysOrgDTO sysOrgDTO);

    /**
     * 查询全部客户
     *
     * @param page
     * @param sysOrgIds
     * @return
     */
    IPage<SysOrgBO> findSysOrgList(Page<SysOrgBO> page, @Param("sysOrgIds") Set<String> sysOrgIds, @Param("userId") String userId, @Param("isAdmin") boolean isAdmin);

    /**
     * 没绑定订单编辑时，下级分支机构也改变
     *
     * @param sysOrg
     */
    void updateChildSysOrg(@Param("sysOrg") SysOrg sysOrg);

    /**
     * 删除客户下的用户
     *
     * @param ids
     */
    void deleteUserOrg(@Param("ids") List<String> ids);

    /**
     * 删除客户下有管理权限的用户
     *
     * @param ids
     */
    void deleteUserOrgMgr(@Param("ids") List<String> ids);

    /**
     * 查询该客户下有无用户
     *
     * @param ids
     */
    List<SysUserOrgDTO> findSysUserOrgByorgIds(@Param("ids") List<String> ids);

    /**
     * 该客户下是否存在分支机构
     *
     * @param ids
     * @return
     */
    List<String> findSysOrgByorgIds(@Param("ids") List<String> ids);

    /**
     * 查询当前客户及下级客户Id
     *
     * @param orgId
     * @return
     */
    List<String> getOrgIdsByOrgId(@Param("orgId") String orgId);

    /**
     * 查询全部客户Ids
     *
     * @param sysOrgDTO
     * @return
     */
    Set<String> findSysOrgIds(@Param("sysOrgDTO") SysOrgDTO sysOrgDTO);

    /**
     * 查询一级客户Ids
     *
     * @param sysOrgDTO
     * @return
     */
    Set<String> findSysOrgMgrIds(@Param("sysOrgDTO") SysOrgDTO sysOrgDTO);

    /**
     * 查询所属分支机构
     *
     * @param id
     * @param sysOrgDTO
     * @return
     */
    List<SysOrgBO> findChildUserOrgList(@Param("id") String id, @Param("sysOrgDTO") SysOrgDTO sysOrgDTO);

    /**
     * 所属一级客户
     *
     * @param id
     * @return
     */
    SysOrgBO findUserOrg(@Param("id") String id);

    /**
     * 可管理客户下的订单
     *
     * @param sysUserOrderMgrDTO
     * @return
     */
    List<SysUserOrderMgrDTO> findSysUserOrgOrderByUserId(@Param("orderMgr") SysUserOrderMgrDTO sysUserOrderMgrDTO);

    /**
     * 新增客户Logo
     *
     * @param orgLogoList
     * @return
     */
    int insertOrgLogo(@Param("orgLogoList") List<SysOrgLogoDTO> orgLogoList);

    /**
     * 查询组织所有业务种类
     */
    String findOrgAllBusiness(@Param("orgId") String orgId);

    int updateOrgBusiness(@Param("businessType") String businessType, @Param("orgId") String orgId);

    /**
     * 修改客户
     *
     * @param orgLogo
     */
    void updateOrgLogo(@Param("orgLogo") SysOrgLogoDTO orgLogo);

    /**
     * 获取客户Logo
     *
     * @param orgId
     * @param businessTypes
     */
    List<SysOrgLogoDTO> getOrgLogo(@Param("orgId") String orgId, @Param("businessTypes") List<String> businessTypes);

    /**
     * 功能描述: 删除组织图标
     *
     * @param:
     * @return:
     * @auther: Destiny
     * @date: 2021/1/19 上午9:10
     */
    Integer deleteOrgBusiness(@Param("orgId") String orgId);
    Integer deleteOrgBusByBusinessId(@Param("businessType") Integer businessType);

    /**
     * 查询业务APP的组织ID
     */
    String findBusinessOrgId(@Param("businessType") Integer businessType);

    /**
     * 根据机构ID和业务种类查询机构信息
     *
     * @param orgInfoParam
     * @return
     */
    List<SysOrgInfo> findOrgInfo(@Param("param") OrgInfoParam orgInfoParam);

    /**
     * 查询子客户信息
     *
     * @param parentId 父ID
     * @return 客户信息列表
     */
    List<SysOrgInfo> findChildInfo(@Param("parentId") String parentId);


    SysUserOrg  findUserOrgByUserId(@Param("userId") String userId);

}
